#encoding:utf-8

# 导入pymysql包文件
import pymysql

# 定义mysql操作类
class mysqldb:
	'''
	该类名称为MySQL操作类
	在该类文件中定义全局变量db，cursor，在构造函数中使用global声明这两个全局变量
	在该类中使用构造函数来链接数据库，使用析构函数来关闭数据库链接
	添加方法，通过MySQL insert into关键字来实现入库操作
	修改方法，通过MySQL update...set...where等关键字来实现修改数据操作
	查询方法，通过MySQL select...where...order by...limit等关键字实现查询数据操作
	删除方法，通过MySQL delete...where等关键字来实现数据删除操作
	'''

	# 定义构造函数，实现数据库链接操作
	def __init__(self,db_host,db_user,db_passwd,db_name):
		'''
		定义构造函数
		参数名称：
		@param string db_host example localhost
		@param string db_user example root
		@param string db_passwd example 123456
		@param string db_name example blog_db
		'''
		
		# 使用global 声明全局变量
		global db
		global cursor

		self.host = db_host
		self.user = db_user
		self.passwd = db_passwd
		self.database = db_name
		
		# 连接数据库
		db = pymysql.connect(host=self.host,user=self.user,passwd=self.passwd,db=self.database,charset="utf8")
		# 创建游标对象
		cursor = db.cursor()

	# 定义入库操作函数
	def insert(self,tab_name,field_list,data):
		'''
		定义数据库入库函数
		参数名称：
		@param string tab_name example users
		@param string field_list example (name,cdate)
		@param tuple data example (1,2,3,4)
		@return int rows
		'''

		self.tab_name = tab_name
		self.field_list = field_list
		self.data = data
		
		# 编写SQL语句
		sql = "INSERT INTO %s %s VALUES %s"%(self.tab_name,self.field_list,self.data)
		try:
			rows = cursor.execute(sql)
			if rows > 0:
				db.commit()
				return rows
		except Exception as err:
			print("SQL执行错误，原因为：",err)
			return False

	# 定义查询函数
	def findAll(self,tab_name,field_list="*",condition=1,order="id ASC",limit=10):
		'''
		定义数据库入库函数
		参数名称：
		@param string tab_name example users
		@param string field_list example (name,cdate)
		@param string condition example isshow = 'yes'
		@param string order example add_date desc
		@param string|int limit example 100|(0,10)
		@return tuple list
		'''
		self.tab_name = tab_name
		self.field_list = field_list
		self.condition = condition
		self.order = order
		self.limit = limit

		#定义SQL语句
		sql = "SELECT %s FROM %s WHERE %s ORDER BY %s LIMIT %s"%(self.field_list,self.tab_name,self.condition,self.order,self.limit)
		
		try:
			query = cursor.execute(sql)
			list = cursor.fetchall()
			return list
		except Exception as err:
			print("SQL 执行错误，原因为：",err)
			return False
	# 定义修改函数
	def modify(self,tab_name,set_list,conditions):
		'''
		定义数据库修改函数
		参数名称：
		@param string tab_name
		@param string set_list
		@param string conditions
		@return int rows
		'''
		self.tab_name = tab_name
		self.set_list = set_list
		self.conditions = conditions
		
		sql = "UPDATE %s SET %s WHERE %s"%(self.tab_name,self.set_list,self.conditions)
		
		try:
			rows = cursor.execute(sql)
			if rows:
				db.commit()
				return rows
		except Exception as err:
			print("SQL 执行错误,原因：",err)
			return False
	# 定义数据库删除函数
	def delete(self,tab_name,conditions):
		'''
		定义数据库删除函数
		参数名称：
		@param string tab_name example users
		@param string condition example id=1
		return int rows
		'''
		self.tab_name = tab_name
		self.conditions = conditions
		
		# 定义SQL语句
		sql = "DELETE FROM %s WHERE %s"%(self.tab_name,self.conditions)
		try:
			rows = cursor.execute(sql)
			if rows > 0:
				db.commit()
				return rows
		except Exception as err:
			print("SQL执行错误，原因：",err)
			return False
	# 定义析构函数
	def __del__(self):
		db.close()
mysql_db = mysqldb("127.0.0.1","root","123456","mydb")
while True:
	print("="*20,'学生管理系统',"="*20)
	print("{0:1} {1:13} {2:15}".format(" ","1:查看学生信息","2:添加学生信息"))
	print("{0:1} {1:13} {2:15}".format(" ","3:删除学生信息","4:退        出"))
	print("="*54)
	key = input("请输入对应的选项：")
	if key == '1':
		stu_list = mysql_db.findAll("student")
		if len(stu_list) == 0:
			print("暂无信息")
			break
		else:
			print("="*11,"学员信息列表","="*12)
			print("|{0:<5}|{1:<12}|{2:<5}|{3:<10}|".format("id","name","age","classid"))
			print("-"*37)
			stu_list = list(stu_list)
			for stu in stu_list:
				stu = list(stu)
				print("|{0:<5}|{1:<10}|{2:<5}|{3:<10}|".format(stu[0],stu[1],stu[2],stu[3]))
				print("-"*37)
		input("请按回车键继续")
	if key == '2':
		stu_name = input("请输入学生姓名:")
		age = input("请输入学生年龄:")
		class_id = input("请输入学生班级:")

		field_list = '(name,age,class_id)'
		data = (stu_name,age,class_id)
		stu_res = mysql_db.insert("student",field_list,data)
		if stu_res:
			print("学员信息添加成功")
			input("请按回车键继续")
		else:
			print("学生信息添加失败,请重新运行改程序进行学生添加")
			break
	if key == '3':
		stu_id = input("请输入要删除的学员id:")
		conditions = "id="+stu_id
		stu_res = mysql_db.delete("student",conditions)
		if stu_res:
			print("学员信息删除成功")
			input("请按回车键继续")
		else:
			print("学员信息删除失败")
			break
	if key == '4':
		print("="*20,"再见","="*25)
		break
	 
